package net.atos.java.example.boodschappen.model;


/**
 * Gebruikers.
 * 
 * @author Pal Hargitai
 */
public class Gebruiker implements Entity<String> {

	/** Primaire sleutel. */
	private final String pk;
	/** Identificatie. */
	private final String id;
	/** Naam. */
	private final String naam;
	/** Email adres. */
	private final String email;

	/** Verstopte constructor. */
	private Gebruiker(Builder builder) {
		pk = builder.pk;
		naam = builder.naam;
		email = builder.email;
		id = builder.id;
	}

	/** {@inheritDoc} */
	@Override
	public String getIdentificatie() {
		return getPk();
	}

	/**
	 * Haalt de pk waarde op.
	 * @return De pk waarde.
	 */
	public String getPk() {
		return pk;
	}

	/**
	 * Haalt de id waarde op.
	 * @return De id waarde.
	 */
	public String getId() {
		return id;
	}

	/**
	 * Haalt de naam waarde op.
	 * @return De naam waarde.
	 */
	public String getNaam() {
		return naam;
	}

	/**
	 * Haalt de email waarde op.
	 * @return De email waarde.
	 */
	public String getEmail() {
		return email;
	}

	/** De bouwer. */
	public static class Builder {
		/** Primaire sleutel. */
		private String pk;
		/** Identificatie. */
		private String id;
		/** Naam. */
		private String naam;
		/** Email adres. */
		private String email;

		/**
		 * Zet de primaire sleutel.
		 * @param pk De primaire sleutel.
		 * @return De bouwer.
		 */
		public Builder pk(String pk) {
			this.pk = pk;
			return this;
		}
		/**
		 * Zet de identificatie.
		 * @param pk De identificatie.
		 * @return De bouwer.
		 */
		public Builder id(String id) {
			this.id = id;
			return this;
		}
		/**
		 * Zet de naam.
		 * @param pk De naam.
		 * @return De bouwer.
		 */
		public Builder naam(String naam) {
			this.naam = naam;
			return this;
		}
		/**
		 * Zet het email adres.
		 * @param pk De het email adres.
		 * @return De bouwer.
		 */
		public Builder email(String email) {
			this.email = email;
			return this;
		}

		/**
		 * Bouwt de gebruiker.
		 * @return De gebruiker.
		 */
		public Gebruiker build() {
			return new Gebruiker(this);
		}
	}
}
